import threading
import time
from typing import Callable


class KeepTimer:

    def __init__(self):
        # 初始化终止标志
        self.terminated = False
        # 初始化子线程变量
        self.threat = None

    # 开始后台线程
    def start_back(self, func: Callable, mis: float=5):
        # 将终止标志设置为False
        self.terminated = False
        # 创建一个线程，用于调用func函数，mis参数表示调用func函数的间隔时间
        self.threat = threading.Thread(target=self.__back,
                                       kwargs={'func': func,
                                               'mis': mis})
        # 启动线程
        self.threat.start()

    # 停止后台线程
    def stop_back(self):
        # 将终止标志设置为True
        self.terminated = True
        # 等待10秒
        self.threat.join(10)

    # 后台线程调用
    def __back(self, func, mis):
        # 循环调用func函数
        while not self.terminated:
            # 打印信息
            print('KeepTimer call once!')
            # 睡眠mis秒
            time.sleep(mis)
            # 调用func函数
            func()
